# 在这里自定义模板标签
# https://docs.djangoproject.com/zh-hans/3.2/howto/custom-template-tags/  官方文档

from django import template
from blog.models import Category, Sidebar, Post

register = template.Library()


@register.simple_tag
def get_category_list():
    # 全站的分类
    return Category.objects.all()


@register.simple_tag
def get_sidebar_list():
    # 侧边栏
    return Sidebar.get_sidebar()


@register.simple_tag
def get_new_post():
    # 最新文章
    return Post.objects.order_by('-pub_date')[:8]


@register.simple_tag
def get_hot_post(limit=8):
    """
    获取热门帖子：
    1. 优先返回手动标记为热门的帖子，并按点击率排序。
    2. 如果手动标记的帖子数量不足，再补充点击率最高的其他帖子。
    :param limit: 返回的帖子数量
    :return: 热门帖子列表
    """
    # 获取手动标记为热门的帖子，并按点击率排序
    hot_posts = Post.objects.filter(is_hot=True).order_by('-pv')[:limit]

    # 如果手动标记的帖子数量不足，补充点击率最高的其他帖子
    if len(hot_posts) < limit:
        remaining = limit - len(hot_posts)
        # 排除已经包含的手动热门帖子，获取点击率最高的其他帖子
        pv_posts = Post.objects.exclude(id__in=[p.id for p in hot_posts]).order_by('-pv')[:remaining]
        # 合并结果
        hot_posts = list(hot_posts) + list(pv_posts)

    return hot_posts


@register.simple_tag
def get_archives():
    # 文章归档
    return Post.objects.dates('add_date', 'month', order='DESC')[:8]
